/**
 * 全站权限配置
 *
 */
import router from './router/index.js'
import {validatenull} from '/src/utils/validate.js'
import {getToken} from '/src/utils/auth.js'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css'

NProgress.configure({showSpinner: false});
const lockPage = '/lock'; //锁屏页
import {useUserStore} from "./store/modules/user.js";
import {useCommonStore} from "./store/modules/common.js";
import {useNavsStore} from "./store/modules/tags.js";

router.beforeEach((to, from, next) => {
  // 路由的元数据
  const meta = to.meta || {};
  // 是否菜单，不过这个变量没有使用
  const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
  // store.commit('SET_IS_MENU', isMenu === undefined);
  const commonStore = useCommonStore();
  const navsStore = useNavsStore();
  commonStore.SET_IS_MENU(isMenu === undefined)
  if (getToken()) {
    //如果系统激活锁屏，全部跳转到锁屏页
    // 如果锁屏了，并且跳转的页面不是锁屏页面，那么此时跳转到锁屏页面
    if (commonStore.isLock && to.path != lockPage) {
      next({path: lockPage})
    } else if (to.path === '/login') {
      //如果登录成功访问登录页跳转到主页
      next({path: '/'})
    } else {
      //如果用户信息为空则获取用户信息获取用户信息失败，跳转到登录页
      const userStore = useUserStore()
      if (userStore.token.length === 0) {
        userStore.GetUserInfo().then(() => {
          next({...to, replace: true})
        }).catch(() => {
          // 如果获取用户信息失败，跳转到登录页
          userStore.FedLogOut().then(() => {
            next({path: '/login'})
          })
        })
      } else {
        const value = to.query.src || to.fullPath;
        const label = to.query.name || to.name;
        const meta = to.meta || router.$avueRouter.meta || {};
        const i18n = to.query.i18n;
        const query = to.query || {}

        if (meta.target) {
          window.open(query.url.replace(/#/g, "&"))
          return
        } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
          // tag的标签来自这里，所以原来代码里的fullpath其实我们没有使用。
          // 作为对比，下面是原来代码中的tag数据。可以看出，有name，path、fullpath几个字段的值是不同的
          // store.commit('ADD_TAG', {
          //   name: query.name || to.name,
          //   path: to.path,
          //   fullPath: to.fullPath,
          //   params: to.params,
          //   query: to.query,
          //   meta: meta
          // });

          navsStore.ADD_TAG({
            label: label,
            value: value,
            params: to.params,
            query: to.query,
            meta: (() => {
              if (!i18n) {
                return meta
              }
              return {
                i18n: i18n
              }
            })(),
            group: router.$avueRouter.group || []
          });
        } else {
          console.log(6)
        }
        next()
      }
    }
  } else {
    //判断是否需要认证，没有登录访问去登录页
    if (meta.isAuth === false) {
      next()
    } else {
      next('/login')
    }
  }
});

router.afterEach(to => {
  NProgress.done();
  const navsStore = useNavsStore();
  const commonStore = useCommonStore();
  let i18n = navsStore.tag.meta.i18n;
  let title = router.$avueRouter.generateTitle(to)

  router.$avueRouter.setTitle(title);
  commonStore.SET_IS_SEARCH(false)
});

// router.onError((error) => {
//   const pattern = /Loading chunk (\d)+ failed/g
//   const isChunkLoadFailed = error.message.match(pattern)
//   const targetPath = router.history.pending.fullPath
//   if (isChunkLoadFailed) {
//     router.replace(targetPath)
//   }
// })